using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Common;
using Microsoft.Practices.EnterpriseLibrary.Data;
using UD.GRAL.Entity;
using UD.Utilities.Exceptions;

namespace UD.GRAL.DataAccess
{
    public class ProgramaEducacionSuperiorDAL : GeneralDAL
    {
        public ProgramaEducacionSuperiorDAL()
        {
        }
        public int InsertarProgramaEducacionSuperior(ProgramaEducacionSuperior pProgramaEducacionSuperior)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_ProgramaEducacionSuperior_Insertar"))
                {
                    int vResultado;
                    vDataBase.AddOutParameter(vDbCommand, "@IdProgramaEducacionSuperior", DbType.Int32, 18);
                    vDataBase.AddInParameter(vDbCommand, "@IdInstitucionEducacionSuperior", DbType.Int32, pProgramaEducacionSuperior.IdInstitucionEducacionSuperior);
                    vDataBase.AddInParameter(vDbCommand, "@IdNivelFormacion", DbType.Int32, pProgramaEducacionSuperior.IdNivelFormacion);
                    vDataBase.AddInParameter(vDbCommand, "@CodProgramaEducacionSuperior", DbType.String, pProgramaEducacionSuperior.CodProgramaEducacionSuperior);
                    vDataBase.AddInParameter(vDbCommand, "@NombreProgramaEducacionSuperior", DbType.String, pProgramaEducacionSuperior.NombreProgramaEducacionSuperior);
                    vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pProgramaEducacionSuperior.Estado);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioCrea", DbType.String, pProgramaEducacionSuperior.UsuarioCrea);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    pProgramaEducacionSuperior.IdProgramaEducacionSuperior = Convert.ToInt32(vDataBase.GetParameterValue(vDbCommand, "@IdProgramaEducacionSuperior").ToString());
                    GenerarLogAuditoria(pProgramaEducacionSuperior, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int ModificarProgramaEducacionSuperior(ProgramaEducacionSuperior pProgramaEducacionSuperior)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_ProgramaEducacionSuperior_Modificar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdProgramaEducacionSuperior", DbType.Int32, pProgramaEducacionSuperior.IdProgramaEducacionSuperior);
                    vDataBase.AddInParameter(vDbCommand, "@IdInstitucionEducacionSuperior", DbType.Int32, pProgramaEducacionSuperior.IdInstitucionEducacionSuperior);
                    vDataBase.AddInParameter(vDbCommand, "@IdNivelFormacion", DbType.Int32, pProgramaEducacionSuperior.IdNivelFormacion);
                    vDataBase.AddInParameter(vDbCommand, "@CodProgramaEducacionSuperior", DbType.String, pProgramaEducacionSuperior.CodProgramaEducacionSuperior);
                    vDataBase.AddInParameter(vDbCommand, "@NombreProgramaEducacionSuperior", DbType.String, pProgramaEducacionSuperior.NombreProgramaEducacionSuperior);
                    vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pProgramaEducacionSuperior.Estado);
                    vDataBase.AddInParameter(vDbCommand, "@UsuarioModifica", DbType.String, pProgramaEducacionSuperior.UsuarioModifica);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pProgramaEducacionSuperior, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }
        public int EliminarProgramaEducacionSuperior(ProgramaEducacionSuperior pProgramaEducacionSuperior)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_ProgramaEducacionSuperior_Eliminar"))
                {
                    int vResultado;
                    vDataBase.AddInParameter(vDbCommand, "@IdProgramaEducacionSuperior", DbType.Int32, pProgramaEducacionSuperior.IdProgramaEducacionSuperior);
                    vResultado = vDataBase.ExecuteNonQuery(vDbCommand);
                    GenerarLogAuditoria(pProgramaEducacionSuperior, vDbCommand);
                    return vResultado;
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                 throw new GenericException(ex);
            }
        }


        public ProgramaEducacionSuperior ConsultarProgramaEducacionSuperior(int pIdProgramaEducacionSuperior)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_ProgramaEducacionSuperior_Consultar"))
                {
                    vDataBase.AddInParameter(vDbCommand, "@IdProgramaEducacionSuperior", DbType.Int32, pIdProgramaEducacionSuperior);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        ProgramaEducacionSuperior vProgramaEducacionSuperior = new ProgramaEducacionSuperior();
                        while (vDataReaderResults.Read())
                        {
                            vProgramaEducacionSuperior.IdProgramaEducacionSuperior = vDataReaderResults["IdProgramaEducacionSuperior"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdProgramaEducacionSuperior"].ToString()) : vProgramaEducacionSuperior.IdProgramaEducacionSuperior;
                            vProgramaEducacionSuperior.IdInstitucionEducacionSuperior = vDataReaderResults["IdInstitucionEducacionSuperior"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdInstitucionEducacionSuperior"].ToString()) : vProgramaEducacionSuperior.IdInstitucionEducacionSuperior;
                            vProgramaEducacionSuperior.IdNivelFormacion = vDataReaderResults["IdNivelFormacion"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdNivelFormacion"].ToString()) : vProgramaEducacionSuperior.IdNivelFormacion;
                            vProgramaEducacionSuperior.CodProgramaEducacionSuperior = vDataReaderResults["CodProgramaEducacionSuperior"] != DBNull.Value ? Convert.ToString(vDataReaderResults["CodProgramaEducacionSuperior"].ToString()) : vProgramaEducacionSuperior.CodProgramaEducacionSuperior;
                            vProgramaEducacionSuperior.NombreProgramaEducacionSuperior = vDataReaderResults["NombreProgramaEducacionSuperior"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreProgramaEducacionSuperior"].ToString()) : vProgramaEducacionSuperior.NombreProgramaEducacionSuperior;
                            vProgramaEducacionSuperior.Estado = vDataReaderResults["Estado"] != DBNull.Value ? Convert.ToBoolean(vDataReaderResults["Estado"].ToString()) : vProgramaEducacionSuperior.Estado;
                            vProgramaEducacionSuperior.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vProgramaEducacionSuperior.UsuarioCrea;
                            vProgramaEducacionSuperior.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vProgramaEducacionSuperior.FechaCrea;
                            vProgramaEducacionSuperior.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vProgramaEducacionSuperior.UsuarioModifica;
                            vProgramaEducacionSuperior.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vProgramaEducacionSuperior.FechaModifica;
                        }
                        return vProgramaEducacionSuperior;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }

        public List<ProgramaEducacionSuperior> ConsultarProgramaEducacionSuperiors(int? pIdNivelFormacion, String pCodProgramaEducacionSuperior, String pNombreProgramaEducacionSuperior, Boolean? pEstado)
        {
            try
            {
                Database vDataBase = ObtenerInstancia();
                using (DbCommand vDbCommand = vDataBase.GetStoredProcCommand("usp_SYSEXTUD_GRAL_ProgramaEducacionSuperiors_Consultar"))
                {
                    if(pIdNivelFormacion != null)
                         vDataBase.AddInParameter(vDbCommand, "@IdNivelFormacion", DbType.Int32, pIdNivelFormacion);
                    if(pCodProgramaEducacionSuperior != null)
                         vDataBase.AddInParameter(vDbCommand, "@CodProgramaEducacionSuperior", DbType.String, pCodProgramaEducacionSuperior);
                    if(pNombreProgramaEducacionSuperior != null)
                         vDataBase.AddInParameter(vDbCommand, "@NombreProgramaEducacionSuperior", DbType.String, pNombreProgramaEducacionSuperior);
                    if(pEstado != null)
                         vDataBase.AddInParameter(vDbCommand, "@Estado", DbType.Boolean, pEstado);
                    using (IDataReader vDataReaderResults = vDataBase.ExecuteReader(vDbCommand))
                    {
                        List<ProgramaEducacionSuperior> vListaProgramaEducacionSuperior = new List<ProgramaEducacionSuperior>();
                        while (vDataReaderResults.Read())
                        {
                                ProgramaEducacionSuperior vProgramaEducacionSuperior = new ProgramaEducacionSuperior();
                            vProgramaEducacionSuperior.IdProgramaEducacionSuperior = vDataReaderResults["IdProgramaEducacionSuperior"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdProgramaEducacionSuperior"].ToString()) : vProgramaEducacionSuperior.IdProgramaEducacionSuperior;
                            vProgramaEducacionSuperior.IdInstitucionEducacionSuperior = vDataReaderResults["IdInstitucionEducacionSuperior"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdInstitucionEducacionSuperior"].ToString()) : vProgramaEducacionSuperior.IdInstitucionEducacionSuperior;
                            vProgramaEducacionSuperior.IdNivelFormacion = vDataReaderResults["IdNivelFormacion"] != DBNull.Value ? Convert.ToInt32(vDataReaderResults["IdNivelFormacion"].ToString()) : vProgramaEducacionSuperior.IdNivelFormacion;
                            vProgramaEducacionSuperior.CodProgramaEducacionSuperior = vDataReaderResults["CodProgramaEducacionSuperior"] != DBNull.Value ? Convert.ToString(vDataReaderResults["CodProgramaEducacionSuperior"].ToString()) : vProgramaEducacionSuperior.CodProgramaEducacionSuperior;
                            vProgramaEducacionSuperior.NombreProgramaEducacionSuperior = vDataReaderResults["NombreProgramaEducacionSuperior"] != DBNull.Value ? Convert.ToString(vDataReaderResults["NombreProgramaEducacionSuperior"].ToString()) : vProgramaEducacionSuperior.NombreProgramaEducacionSuperior;
                            vProgramaEducacionSuperior.Estado = vDataReaderResults["Estado"] != DBNull.Value ? Convert.ToBoolean(vDataReaderResults["Estado"].ToString()) : vProgramaEducacionSuperior.Estado;
                            vProgramaEducacionSuperior.UsuarioCrea = vDataReaderResults["UsuarioCrea"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioCrea"].ToString()) : vProgramaEducacionSuperior.UsuarioCrea;
                            vProgramaEducacionSuperior.FechaCrea = vDataReaderResults["FechaCrea"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaCrea"].ToString()) : vProgramaEducacionSuperior.FechaCrea;
                            vProgramaEducacionSuperior.UsuarioModifica = vDataReaderResults["UsuarioModifica"] != DBNull.Value ? Convert.ToString(vDataReaderResults["UsuarioModifica"].ToString()) : vProgramaEducacionSuperior.UsuarioModifica;
                            vProgramaEducacionSuperior.FechaModifica = vDataReaderResults["FechaModifica"] != DBNull.Value ? Convert.ToDateTime(vDataReaderResults["FechaModifica"].ToString()) : vProgramaEducacionSuperior.FechaModifica;
                                vListaProgramaEducacionSuperior.Add(vProgramaEducacionSuperior);
                        }
                        return vListaProgramaEducacionSuperior;
                    }
                }
            }
            catch (UserInterfaceException)
            {
                throw;
            }
            catch (Exception ex)
            {
                throw new GenericException(ex);
            }
        }
    }
}
